/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.eurotrader.validadores;

import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;




/**
 *
 * @author Usuário
 */
public class ValidarCnpj implements Validator {


    public void validate(FacesContext context, UIComponent validate, Object valorTela) throws ValidatorException {

    String cnpj = (String) valorTela;
    String cnpjSemMaskara;
     cnpjSemMaskara =  cnpj.replace(".", "").replace("/", "").replace("-", "");
        
        if(cnpjSemMaskara == null || cnpjSemMaskara.length() != 14){            
            ((UIInput)validate).setValid(false);
            FacesMessage msg = new FacesMessage("CNPJ Invalido");
            context.addMessage(validate.getClientId(context), msg);
         }else{
          try {
               Long.parseLong(cnpjSemMaskara);
          } catch (NumberFormatException e) { // CNPJ não possui somente números
               ((UIInput)validate).setValid(false);
            FacesMessage msg = new FacesMessage("CNPJ Invalido");
            context.addMessage(validate.getClientId(context), msg);
          }

         int soma = 0;
          String cnpj_calc = cnpjSemMaskara.substring(0, 12);
         
         char chr_cnpj[] = cnpjSemMaskara.toCharArray();
          for(int i = 0; i < 4; i++)
              if(chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
                    soma += (chr_cnpj[i] - 48) * (6 - (i + 1));

         for(int i = 0; i < 8; i++)
             if(chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9)
                   soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));

         int dig = 11 - soma % 11;
        cnpj_calc = (new StringBuilder(String.valueOf(cnpj_calc))).append(dig != 10 && dig != 11 ? Integer.toString(dig) : "0").toString();
         soma = 0;
        for(int i = 0; i < 5; i++)
             if(chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
                  soma += (chr_cnpj[i] - 48) * (7 - (i + 1));

        for(int i = 0; i < 8; i++)
             if(chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9)
                  soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));

         dig = 11 - soma % 11;
        cnpj_calc = (new StringBuilder(String.valueOf(cnpj_calc))).append(dig != 10 && dig != 11 ? Integer.toString(dig) : "0").toString();
       
         if(!cnpjSemMaskara.equals(cnpj_calc)){
            ((UIInput)validate).setValid(false);
            FacesMessage msg = new FacesMessage("CNPJ Invalido");
            context.addMessage(validate.getClientId(context), msg);
         }
      }

    }

//    public static void validaCNPJ(String cnpj) throws FormatoCNPJException {
//
//         if(cnpj == null || cnpj.length() != 14){
//              FacesMessage msg = new FacesMessage("CNPJ Invalido");
//         }
//          try {
//               Long.parseLong(cnpj);
//          } catch (NumberFormatException e) { // CNPJ não possui somente números
//              throw new FormatoCNPJException();
//          }
//
//         int soma = 0;
//          String cnpj_calc = cnpj.substring(0, 12);
//          System.out.println("VALIDAR SUB>>>>"+cnpj_calc);
//         char chr_cnpj[] = cnpj.toCharArray();
//          for(int i = 0; i < 4; i++)
//              if(chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
//                    soma += (chr_cnpj[i] - 48) * (6 - (i + 1));
//
//         for(int i = 0; i < 8; i++)
//             if(chr_cnpj[i + 4] - 48 >= 0 && chr_cnpj[i + 4] - 48 <= 9)
//                   soma += (chr_cnpj[i + 4] - 48) * (10 - (i + 1));
//
//         int dig = 11 - soma % 11;
//        cnpj_calc = (new StringBuilder(String.valueOf(cnpj_calc))).append(dig != 10 && dig != 11 ? Integer.toString(dig) : "0").toString();
//         soma = 0;
//        for(int i = 0; i < 5; i++)
//             if(chr_cnpj[i] - 48 >= 0 && chr_cnpj[i] - 48 <= 9)
//                  soma += (chr_cnpj[i] - 48) * (7 - (i + 1));
//
//        for(int i = 0; i < 8; i++)
//             if(chr_cnpj[i + 5] - 48 >= 0 && chr_cnpj[i + 5] - 48 <= 9)
//                  soma += (chr_cnpj[i + 5] - 48) * (10 - (i + 1));
//
//         dig = 11 - soma % 11;
//        cnpj_calc = (new StringBuilder(String.valueOf(cnpj_calc))).append(dig != 10 && dig != 11 ? Integer.toString(dig) : "0").toString();
//        System.out.println("VALIDOU>>>>>"+cnpj_calc);
//         if(!cnpj.equals(cnpj_calc)){
//           FacesMessage msg = new FacesMessage("CNPJ Invalido");
//         }
//     }







}
